Laboratório R 01¶


Aluno Wesley Rodrigues
Curso Mestrado em Computação Aplicada
Turma T06
Disciplina Big Data & Analitycs
Atividade Laboratório R 01
Data 10/OUT/2023


As atividades propostas em sala tem como objetivo familiarizar o aluno com as operações comuns em análise de conjuntos de dados. Esta atividade foi realizada em Python, que foi colocado como alternativa ao R.

In [1]:
# Nesta seção as bibliotecas necessárias para o funcionamento do código são importadas

import math
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

Resolução dos Exercícios¶

Bloco 1¶

1. Calcule as seguintes expressões:¶

a) 12 + (16 - 7) * 7 - 8/4
b) (e ** 6/2 - 3**(1/2)) / (pi * 23 ** (1/5)) + ln 15
c) sin(51) + cos(6) − log3 7

In [2]:
12 + (16 - 7) * 7 - 8/4
Out[2]:
73.0
In [3]:
e = math.e
pi = math.pi
ln = math.log

((e ** (6/2)) - 3 ** (1/2)) / (pi * (23 ** (1/5))) + ln(15)
Out[3]:
5.8285425904692705
In [4]:
sin = math.sin
cos = math.cos
log = math.log

sin(51) + cos(6) + log(7, 3)
Out[4]:
3.4016432116551627

2. Multiplique a sua idade por meses e salve o resultado em um objeto chamado idade_em_meses.¶

Em seguida, multiplique esse objeto por 30 e salve o resultado em um objeto chamado idade_em_dias.

In [5]:
idade = 37
idade_em_meses = idade * 12
idade_em_dias = idade_em_meses * 30

3. Guarde em um objeto chamado nome uma string contendo o seu nome completo.¶

In [6]:
nome = 'Wesley Rodrigues da Silva'
In [7]:
print('Olá,', nome)
print(f'Você tem {idade} anos, que equivalem a {idade_em_meses} meses ou {idade_em_dias} dias')
Olá, Wesley Rodrigues da Silva
Você tem 37 anos, que equivalem a 444 meses ou 13320 dias

4. Qual é a soma dos números de 101 a 1000?¶

In [8]:
sum(range(101, 1000 + 1))
Out[8]:
495450

5. Quantos algarismos possui o resultado do produto dos números de 1 a 12?¶

In [9]:
resultado = math.prod((range(1, 12 + 1)))
print(f'O número {resultado} possui {len(str(resultado))} algarismos.')
O número 479001600 possui 9 algarismos.

6. Use o vetor números abaixo para responder as questões seguintes.¶

numeros <- -4:2

a) Escreva um código que devolva apenas valores positivos do vetor numeros.
b) Escreva um código que de volta apenas os valores pares do vetor numeros.
c) Filtre o vetor para que retorne apenas aqueles valores que, quando elevados a 2, são menores que 4.

In [10]:
numeros = list(range(-4, 2 + 1))
print('Vetor de números:', numeros)

resposta_a = list(filter(lambda x: x >= 0, numeros))
print('Resposta a:', resposta_a)

resposta_b = list(filter(lambda x: x % 2 == 0, numeros))
print('Resposta b:', resposta_b)

resposta_c = list(filter(lambda x: x ** 2 > 4, numeros))
print('Resposta c:', resposta_c)
Vetor de números: [-4, -3, -2, -1, 0, 1, 2]
Resposta a: [0, 1, 2]
Resposta b: [-4, -2, 0, 2]
Resposta c: [-4, -3]

7. Quais as diferenças entre NaN, NULL, NA e Inf? Digite expressões que retornem cada um desses valores.¶

NaN significa not a number, ou seja, não é um número.

NULL é um valor indefinido. Ocorre, por exemplo, quando uma propriedade de um objeto não é definida.

NA significa not available e geralmente é usado quando dados estão faltando. Ocorre ao importar dados com valores ausentes.

Inf e -Inf são infinitos. Ocorrem por exemplo na divisão por zero.

8. Carregue o conjunto de dados airquality com o comando data(airquality) para responder às questões abaixo.¶

a) Conte quantos NAs tem na coluna Solar.R.
b) Filtre a tabela airquality com apenas linhas em que Solar.R é NA.
c) Filtre a tabela airquality com apenas linhas em que Solar.R não é NA.
d) Filtre a tabela airquality com apenas linhas em que Solar.R não é NA e Month é igual a 5.

In [11]:
df = pd.read_csv('./datasets/airquality.csv')
df.head()
Out[11]:
rownames Ozone Solar.R Wind Temp Month Day
0 1 41.0 190.0 7.4 67 5 1
1 2 36.0 118.0 8.0 72 5 2
2 3 12.0 149.0 12.6 74 5 3
3 4 18.0 313.0 11.5 62 5 4
4 5 NaN NaN 14.3 56 5 5
In [12]:
resposta_a = sum(df['Solar.R'].isna())
print('Resposta a:', resposta_a)
Resposta a: 7
In [13]:
resposta_b = df[df['Solar.R'].isna()]
print('Resposta b:')
resposta_b
Resposta b:
Out[13]:
rownames Ozone Solar.R Wind Temp Month Day
4 5 NaN NaN 14.3 56 5 5
5 6 28.0 NaN 14.9 66 5 6
10 11 7.0 NaN 6.9 74 5 11
26 27 NaN NaN 8.0 57 5 27
95 96 78.0 NaN 6.9 86 8 4
96 97 35.0 NaN 7.4 85 8 5
97 98 66.0 NaN 4.6 87 8 6
In [14]:
resposta_c = df.query('`Solar.R`.isna() == False & Month == 5')
print('Resposta c:')
resposta_c
Resposta c:
Out[14]:
rownames Ozone Solar.R Wind Temp Month Day
0 1 41.0 190.0 7.4 67 5 1
1 2 36.0 118.0 8.0 72 5 2
2 3 12.0 149.0 12.6 74 5 3
3 4 18.0 313.0 11.5 62 5 4
6 7 23.0 299.0 8.6 65 5 7
7 8 19.0 99.0 13.8 59 5 8
8 9 8.0 19.0 20.1 61 5 9
9 10 NaN 194.0 8.6 69 5 10
11 12 16.0 256.0 9.7 69 5 12
12 13 11.0 290.0 9.2 66 5 13
13 14 14.0 274.0 10.9 68 5 14
14 15 18.0 65.0 13.2 58 5 15
15 16 14.0 334.0 11.5 64 5 16
16 17 34.0 307.0 12.0 66 5 17
17 18 6.0 78.0 18.4 57 5 18
18 19 30.0 322.0 11.5 68 5 19
19 20 11.0 44.0 9.7 62 5 20
20 21 1.0 8.0 9.7 59 5 21
21 22 11.0 320.0 16.6 73 5 22
22 23 4.0 25.0 9.7 61 5 23
23 24 32.0 92.0 12.0 61 5 24
24 25 NaN 66.0 16.6 57 5 25
25 26 NaN 266.0 14.9 58 5 26
27 28 23.0 13.0 12.0 67 5 28
28 29 45.0 252.0 14.9 81 5 29
29 30 115.0 223.0 5.7 79 5 30
30 31 37.0 279.0 7.4 76 5 31

BLOCO 2: Análise descritiva de dados¶

1. Carregue o conjunto de dados USArrests com o comando data(USArrests).¶

Examine a sua documentação com help(USArrests) e responda as perguntas a seguir.

a. qual o número médio e mediano de cada um dos crimes?
b. encontre a mediana e quartis para cada crime.
c. encontre o número máximo e mínimo para cada crime.
d. faça um gráfico adequado para o número de assassinatos (murder).
e. verifique se há correlação entre os diferentes tipos de crime.
f. verifique se há correlação entre os crimes e a proporção de população urbana.
g. encontre os estados com maior e menor ocorrência de cada tipo de crime.
h. encontre os estados com maior e menor ocorrência per capta de cada tipo de crime.
i. encontre os estados com maior e menor ocorrência do total de crimes.

In [15]:
df = pd.read_csv('./datasets/USArrests.csv')
df.sample(10)
Out[15]:
rownames Murder Assault UrbanPop Rape
21 Michigan 12.1 255 74 35.1
48 Wisconsin 2.6 53 66 10.8
26 Nebraska 4.3 102 62 16.5
22 Minnesota 2.7 72 66 14.9
35 Oklahoma 6.6 151 68 20.0
37 Pennsylvania 6.3 106 72 14.9
31 New York 11.1 254 86 26.1
2 Arizona 8.1 294 80 31.0
11 Idaho 2.6 120 54 14.2
23 Mississippi 16.1 259 44 17.1
In [16]:
crimes = ['Murder', 'Assault', 'Rape']
In [17]:
print('Média, mediana e quartis dos crimes:  (exercícios a, b e c)')
df[crimes].describe()
Média, mediana e quartis dos crimes:  (exercícios a, b e c)
Out[17]:
Murder Assault Rape
count 50.00000 50.000000 50.000000
mean 7.78800 170.760000 21.232000
std 4.35551 83.337661 9.366385
min 0.80000 45.000000 7.300000
25% 4.07500 109.000000 15.075000
50% 7.25000 159.000000 20.100000
75% 11.25000 249.000000 26.175000
max 17.40000 337.000000 46.000000
In [18]:
px.box(df[crimes], height=600)
In [19]:
# d. faça um gráfico adequado para o número de assassinatos (murder).  

fig = px.bar(df.sort_values(ascending=False, by='Murder'), x='rownames', y='Murder', height=600)
fig.show()
In [20]:
# e. verifique se há correlação entre os diferentes tipos de crime.  

df[crimes].corr()
Out[20]:
Murder Assault Rape
Murder 1.000000 0.801873 0.563579
Assault 0.801873 1.000000 0.665241
Rape 0.563579 0.665241 1.000000
In [21]:
px.imshow(df[crimes].corr(), text_auto=True, title='Mapa de Calor da Correlação entre Crimes', height=600)
In [22]:
# f. verifique se há correlação entre os crimes e a proporção de população urbana.  
df[['Murder', 'Assault', 'Rape','UrbanPop']].corr()
Out[22]:
Murder Assault Rape UrbanPop
Murder 1.000000 0.801873 0.563579 0.069573
Assault 0.801873 1.000000 0.665241 0.258872
Rape 0.563579 0.665241 1.000000 0.411341
UrbanPop 0.069573 0.258872 0.411341 1.000000
In [23]:
px.imshow(df[['Murder', 'Assault', 'Rape','UrbanPop']].corr(), text_auto=True, title='Mapa de Calor da Correlação entre Crimes e População', height=600)
In [24]:
# g. encontre os estados com maior e menor ocorrência de cada tipo de crime.  

print('Top 5 estados com mais assassinatos:')
df.sort_values(by='Murder', ascending=False)[:5]
Top 5 estados com mais assassinatos:
Out[24]:
rownames Murder Assault UrbanPop Rape
9 Georgia 17.4 211 60 25.8
23 Mississippi 16.1 259 44 17.1
8 Florida 15.4 335 80 31.9
17 Louisiana 15.4 249 66 22.2
39 South Carolina 14.4 279 48 22.5
In [25]:
print('Top 5 estados com menos assassinatos:')
df.sort_values(by='Murder', ascending=True)[:5]
Top 5 estados com menos assassinatos:
Out[25]:
rownames Murder Assault UrbanPop Rape
33 North Dakota 0.8 45 44 7.3
28 New Hampshire 2.1 57 56 9.5
18 Maine 2.1 83 51 7.8
14 Iowa 2.2 56 57 11.3
44 Vermont 2.2 48 32 11.2
In [26]:
print('Top 5 estados com mais assaltos:')
df.sort_values(by='Assault', ascending=False)[:5]
Top 5 estados com mais assaltos:
Out[26]:
rownames Murder Assault UrbanPop Rape
32 North Carolina 13.0 337 45 16.1
8 Florida 15.4 335 80 31.9
19 Maryland 11.3 300 67 27.8
2 Arizona 8.1 294 80 31.0
30 New Mexico 11.4 285 70 32.1
In [27]:
print('Top 5 estados com menos assaltos:')
df.sort_values(by='Assault', ascending=True)[:5]
Top 5 estados com menos assaltos:
Out[27]:
rownames Murder Assault UrbanPop Rape
33 North Dakota 0.8 45 44 7.3
10 Hawaii 5.3 46 83 20.2
44 Vermont 2.2 48 32 11.2
48 Wisconsin 2.6 53 66 10.8
14 Iowa 2.2 56 57 11.3
In [28]:
print('Top 5 estados com mais estupros:')
df.sort_values(by='Rape', ascending=False)[:5]
Top 5 estados com mais estupros:
Out[28]:
rownames Murder Assault UrbanPop Rape
27 Nevada 12.2 252 81 46.0
1 Alaska 10.0 263 48 44.5
4 California 9.0 276 91 40.6
5 Colorado 7.9 204 78 38.7
21 Michigan 12.1 255 74 35.1
In [29]:
print('Top 5 estados com menos estupros:')
df.sort_values(by='Rape', ascending=True)[:5]
Top 5 estados com menos estupros:
Out[29]:
rownames Murder Assault UrbanPop Rape
33 North Dakota 0.8 45 44 7.3
18 Maine 2.1 83 51 7.8
38 Rhode Island 3.4 174 87 8.3
47 West Virginia 5.7 81 39 9.3
28 New Hampshire 2.1 57 56 9.5
In [30]:
# h. encontre os estados com maior e menor ocorrência per capta de cada tipo de crime.  

df['MurderPC'] = df['Murder'] / df['UrbanPop']
print('Top 5 estados com mais assassinatos per capita:')
df.sort_values(by='MurderPC', ascending=False)[:5]
Top 5 estados com mais assassinatos per capita:
Out[30]:
rownames Murder Assault UrbanPop Rape MurderPC
23 Mississippi 16.1 259 44 17.1 0.365909
39 South Carolina 14.4 279 48 22.5 0.300000
9 Georgia 17.4 211 60 25.8 0.290000
32 North Carolina 13.0 337 45 16.1 0.288889
17 Louisiana 15.4 249 66 22.2 0.233333
In [31]:
print('Top 5 estados com menos assassinatos per capita:')
df.sort_values(by='MurderPC', ascending=True)[:5]
Top 5 estados com menos assassinatos per capita:
Out[31]:
rownames Murder Assault UrbanPop Rape MurderPC
33 North Dakota 0.8 45 44 7.3 0.018182
28 New Hampshire 2.1 57 56 9.5 0.037500
14 Iowa 2.2 56 57 11.3 0.038596
38 Rhode Island 3.4 174 87 8.3 0.039080
48 Wisconsin 2.6 53 66 10.8 0.039394
In [32]:
df['AssaultPC'] = df['Assault'] / df['UrbanPop']
print('Top 5 estados com mais assaltos per capita:')
df.sort_values(by='AssaultPC', ascending=False)[:5]
Top 5 estados com mais assaltos per capita:
Out[32]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC
32 North Carolina 13.0 337 45 16.1 0.288889 7.488889
23 Mississippi 16.1 259 44 17.1 0.365909 5.886364
39 South Carolina 14.4 279 48 22.5 0.300000 5.812500
1 Alaska 10.0 263 48 44.5 0.208333 5.479167
19 Maryland 11.3 300 67 27.8 0.168657 4.477612
In [33]:
print('Top 5 estados com menos assaltos per capita:')
df.sort_values(by='AssaultPC', ascending=True)[:5]
Top 5 estados com menos assaltos per capita:
Out[33]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC
10 Hawaii 5.3 46 83 20.2 0.063855 0.554217
48 Wisconsin 2.6 53 66 10.8 0.039394 0.803030
14 Iowa 2.2 56 57 11.3 0.038596 0.982456
28 New Hampshire 2.1 57 56 9.5 0.037500 1.017857
33 North Dakota 0.8 45 44 7.3 0.018182 1.022727
In [34]:
df['RapePC'] = df['Rape'] / df['UrbanPop']
print('Top 5 estados com mais estupros per capita:')
df.sort_values(by='RapePC', ascending=False)[:5]
Top 5 estados com mais estupros per capita:
Out[34]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC RapePC
1 Alaska 10.0 263 48 44.5 0.208333 5.479167 0.927083
27 Nevada 12.2 252 81 46.0 0.150617 3.111111 0.567901
5 Colorado 7.9 204 78 38.7 0.101282 2.615385 0.496154
21 Michigan 12.1 255 74 35.1 0.163514 3.445946 0.474324
39 South Carolina 14.4 279 48 22.5 0.300000 5.812500 0.468750
In [35]:
print('Top 5 estados com menos estupros per capita:')
df.sort_values(by='RapePC', ascending=True)[:5]
Top 5 estados com menos estupros per capita:
Out[35]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC RapePC
38 Rhode Island 3.4 174 87 8.3 0.039080 2.000000 0.095402
6 Connecticut 3.3 110 77 11.1 0.042857 1.428571 0.144156
18 Maine 2.1 83 51 7.8 0.041176 1.627451 0.152941
48 Wisconsin 2.6 53 66 10.8 0.039394 0.803030 0.163636
33 North Dakota 0.8 45 44 7.3 0.018182 1.022727 0.165909
In [36]:
# i. encontre os estados com maior e menor ocorrência do total de crimes.  

df['Crimes'] = df['Murder'] + df['Assault'] + df['Rape']

print('Top 5 estados com mais crimes somados (assassinatos, assaltos e estupros):')
df.sort_values(by='Crimes', ascending=False)[:5]
Top 5 estados com mais crimes somados (assassinatos, assaltos e estupros):
Out[36]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC RapePC Crimes
8 Florida 15.4 335 80 31.9 0.192500 4.187500 0.398750 382.3
32 North Carolina 13.0 337 45 16.1 0.288889 7.488889 0.357778 366.1
19 Maryland 11.3 300 67 27.8 0.168657 4.477612 0.414925 339.1
2 Arizona 8.1 294 80 31.0 0.101250 3.675000 0.387500 333.1
30 New Mexico 11.4 285 70 32.1 0.162857 4.071429 0.458571 328.5
In [37]:
print('Top 5 estados com menos crimes somados (assassinatos, assaltos e estupros):')
df.sort_values(by='Crimes', ascending=True)[:5]
Top 5 estados com menos crimes somados (assassinatos, assaltos e estupros):
Out[37]:
rownames Murder Assault UrbanPop Rape MurderPC AssaultPC RapePC Crimes
33 North Dakota 0.8 45 44 7.3 0.018182 1.022727 0.165909 53.1
44 Vermont 2.2 48 32 11.2 0.068750 1.500000 0.350000 61.4
48 Wisconsin 2.6 53 66 10.8 0.039394 0.803030 0.163636 66.4
28 New Hampshire 2.1 57 56 9.5 0.037500 1.017857 0.169643 68.6
14 Iowa 2.2 56 57 11.3 0.038596 0.982456 0.198246 69.5

2. Para resolver os exercícios a seguir, utilize a base imdb. Essa base pode ser baixada clicando aqui. Uma vez baixada, o comando para ler a base é apresentado a seguir:¶

install.packages("readr")
imdb <- readr::read_rds("caminho_do_arquivo/imdb.rds")
imdb

OBS: para saber qual é o diretório atual do seu projeto e trocá-lo, caso ache necessário, utilize as funções getwd() e setwd(“caminho_do_novo_diretorio”).

a. Crie um gráfico de dispersão da nota do imdb pelo orçamento.
b. Faça um gráfico de linhas do orçamento médio dos filmes ao longo dos anos.
c. Transforme o gráfico do exercício anterior em um gráfico de barras.
d. Descubra quais são os 5 atores que mais aparecem na coluna ator_1 e faça um boxplot do lucro dos filmes desses atores.
e. Resolva os itens a seguir para fazer um gráfico de barras da frequência de filmes com nota maior que 8 ao longo dos anos.
i. Crie uma nova coluna na base IMDB indicando se a nota de um filme é maior que 8 ou não.
ii. Utilizando a coluna criada em (i) crie uma tabela com o número anual de filmes com nota maior 8.
iii. Utilize a tabela criada em (ii) para fazer um gráfico de barras do número de filmes com nota maior que 8 ao longo dos anos.
f. Represente as mesmas informações do item e com um gráfico de pizza.

In [38]:
df = pd.read_csv('./datasets/imdb.csv', sep=';')
df.sample(10)
Out[38]:
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3
955 The Pledge 2001.0 Sean Penn 124.0 Color Crime|Drama|Mystery|Thriller USA A partir de 18 anos 45000000.0 19719930.0 6,8 0 Costas Mandylor Adrien Dorval Nels Lennarson
835 The Book of Life 2014.0 Jorge R. Gutiérrez 95.0 Color Adventure|Animation|Comedy|Family|Fantasy|Romance USA Livre 50000000.0 50150619.0 7,3 18000 Channing Tatum Hector Elizondo Ana de la Reguera
2697 Friends with Money 2006.0 Nicole Holofcener 88.0 Color Comedy|Drama|Romance USA A partir de 18 anos 6500000.0 13367101.0 5,9 515 Greg Germann Marin Hinkle Jake Cherry
3217 Beasts of the Southern Wild 2012.0 Benh Zeitlin 93.0 Color Drama|Fantasy USA A partir de 13 anos 1800000.0 12784397.0 7,3 31000 Quvenzhané Wallis Gina Montana Dwight Henry
2091 Diary of a Wimpy Kid 2010.0 Thor Freudenthal 94.0 Color Comedy|Family USA Livre 15000000.0 64001297.0 6,2 0 Chloë Grace Moretz Zachary Gordon Rachael Harris
1643 Without Limits 1998.0 Robert Towne 117.0 Color Biography|Drama|Sport USA A partir de 13 anos 25000000.0 777423.0 7,2 942 Billy Burke Monica Potter Billy Crudup
2862 Rudderless 2014.0 William H. Macy 105.0 Color Comedy|Drama|Music USA A partir de 18 anos 5000000.0 37440.0 7,5 0 Billy Crudup Felicity Huffman David Adam Flannery
11 Man of Steel 2013.0 Zack Snyder 143.0 Color Action|Adventure|Fantasy|Sci-Fi USA A partir de 13 anos 225000000.0 291021565.0 7,2 118000 Henry Cavill Christopher Meloni Harry Lennix
2076 Madison 2001.0 William Bindley 94.0 Color Drama|Sport USA Livre NaN 508867.0 6,5 282 Bruce Dern Jake Lloyd William Shockley
2890 Spun 2002.0 Jonas Åkerlund 106.0 Color Comedy|Crime|Drama USA A partir de 18 anos 2000000.0 410241.0 6,8 3000 Patrick Fugit Nicholas Gonzalez Debbie Harry
In [39]:
# a. Crie um gráfico de dispersão da nota do imdb pelo orçamento.  

px.scatter(df.sort_values(by='nota_imdb'), x='orcamento', y='nota_imdb', height=600)
In [40]:
# b. Faça um gráfico de linhas do orçamento médio dos filmes ao longo dos anos.  

orcamento_medio_ano = df[['ano', 'orcamento']].groupby(by='ano').mean()
orcamento_medio_ano
Out[40]:
orcamento
ano
1916.0 3.859070e+05
1920.0 1.000000e+05
1925.0 2.450000e+05
1929.0 3.790000e+05
1930.0 3.950000e+06
... ...
2012.0 4.311197e+07
2013.0 4.647931e+07
2014.0 3.650454e+07
2015.0 3.625789e+07
2016.0 5.746343e+07

90 rows × 1 columns

In [41]:
px.line(orcamento_medio_ano, height=600)
In [42]:
# c. Transforme o gráfico do exercício anterior em um gráfico de barras.  

px.bar(orcamento_medio_ano, height=600)
In [43]:
# d. Descubra quais são os 5 atores que mais aparecem na coluna ator_1 e faça um boxplot do lucro dos filmes desses atores.  

df['lucro'] = df['receita'] - df['orcamento']

top_atores = df['ator_1'].value_counts(ascending=False)[:5]
top_atores
Out[43]:
Robert De Niro       41
Johnny Depp          31
J.K. Simmons         29
Nicolas Cage         28
Denzel Washington    28
Name: ator_1, dtype: int64
In [44]:
df_top_atores = df.query('ator_1 in @top_atores.keys()')
df_top_atores
Out[44]:
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3 lucro
1 Pirates of the Caribbean: At World's End 2007.0 Gore Verbinski 169.0 Color Action|Adventure|Fantasy USA A partir de 13 anos 300000000.0 309404152.0 7,1 0 Johnny Depp Orlando Bloom Jack Davenport 9404152.0
4 Spider-Man 3 2007.0 Sam Raimi 156.0 Color Action|Adventure|Romance USA A partir de 13 anos 258000000.0 336530303.0 6,2 0 J.K. Simmons James Franco Kirsten Dunst 78530303.0
9 Pirates of the Caribbean: Dead Man's Chest 2006.0 Gore Verbinski 151.0 Color Action|Adventure|Fantasy USA A partir de 13 anos 225000000.0 423032628.0 7,3 5000 Johnny Depp Orlando Bloom Jack Davenport 198032628.0
10 The Lone Ranger 2013.0 Gore Verbinski 150.0 Color Action|Adventure|Western USA A partir de 13 anos 215000000.0 89289910.0 6,5 48000 Johnny Depp Ruth Wilson Tom Wilkinson -125710090.0
14 Pirates of the Caribbean: On Stranger Tides 2011.0 Rob Marshall 136.0 Color Action|Adventure|Fantasy USA A partir de 13 anos 250000000.0 241063875.0 6,7 58000 Johnny Depp Sam Claflin Stephen Graham -8936125.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2941 Joe 2013.0 David Gordon Green 117.0 Color Drama USA A partir de 18 anos 4000000.0 371897.0 6,9 11000 Nicolas Cage Tye Sheridan Ronnie Gene Blevins -3628103.0
2996 Whiplash 2014.0 Damien Chazelle 107.0 Color Drama|Music USA A partir de 18 anos 3300000.0 13092000.0 8,5 129000 J.K. Simmons Melissa Benoist Chris Mulkey 9792000.0
3052 Tusk 2014.0 Kevin Smith 102.0 Color Comedy|Drama|Horror USA A partir de 18 anos 3000000.0 1821983.0 5,4 20000 Johnny Depp Haley Joel Osment Michael Parks -1178017.0
3166 Harsh Times 2005.0 David Ayer 116.0 Color Action|Crime|Drama|Thriller USA A partir de 18 anos 2000000.0 3335839.0 7,0 0 J.K. Simmons Christian Bale Noel Gugliemi 1335839.0
3332 Taxi Driver 1976.0 Martin Scorsese 110.0 Color Crime|Drama USA A partir de 18 anos 1300000.0 NaN 8,3 35000 Robert De Niro Albert Brooks Peter Boyle NaN

157 rows × 16 columns

In [45]:
px.box(df_top_atores[['ator_1', 'lucro']], x='ator_1', y='lucro', height=600)
In [46]:
# e. Resolva os itens a seguir para fazer um gráfico de barras da frequência de filmes com nota maior que 8 ao longo dos anos.  
#    i. Crie uma nova coluna na base IMDB indicando se a nota de um filme é maior que 8 ou não.  
#    ii. Utilizando a coluna criada em (i) crie uma tabela com o número anual de filmes com nota maior 8.  
#    iii. Utilize a tabela criada em (ii) para fazer um gráfico de barras do número de filmes com nota maior que 8 ao longo dos anos.

df['nota_imdb_num'] = df['nota_imdb'].str.replace(',', '.').astype(float)
In [47]:
maior_que_oito = df['nota_imdb_num'] > 8
In [48]:
# i
df['MaiorQueOito'] = maior_que_oito
df.sample(20)
Out[48]:
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3 lucro nota_imdb_num MaiorQueOito
2776 Saw II 2005.0 Darren Lynn Bousman 95.0 Color Horror|Mystery USA A partir de 18 anos 4000000.0 87025093.0 6,6 0 Emmanuelle Vaugier Tony Nappo Shawnee Smith 83025093.0 6.6 False
1646 The Counselor 2013.0 Ridley Scott 138.0 Color Crime|Drama|Thriller USA A partir de 18 anos 25000000.0 16969390.0 5,3 24000 Michael Fassbender Brad Pitt Goran Visnjic -8030610.0 5.3 False
3427 Harrison Montgomery 2008.0 Daniel Davila 95.0 Color Drama USA Outros 850000.0 NaN 7,4 18 Martin Landau Melora Walters Diane Baker NaN 7.4 False
1241 Parker 2013.0 Taylor Hackford 118.0 Color Action|Crime|Romance|Thriller USA A partir de 18 anos 35000000.0 17609982.0 6,2 17000 Jason Statham Clifton Collins Jr. Wendell Pierce -17390018.0 6.2 False
3281 The Dog Lover 2016.0 Alex Ranarivelo 101.0 Color Drama USA Livre 2000000.0 NaN 4,8 724 Lea Thompson Christina Moore Cullen Douglas NaN 4.8 False
1360 Message in a Bottle 1999.0 Luis Mandoki 131.0 Color Drama|Romance USA A partir de 13 anos 55000000.0 52799004.0 6,1 0 Robin Wright John Savage Raphael Sbarge -2200996.0 6.1 False
2918 The Cooler 2003.0 Wayne Kramer 101.0 Color Crime|Drama|Fantasy|Romance USA A partir de 18 anos 3200000.0 8243880.0 7,0 762 Estella Warren Paul Sorvino Shawn Hatosy 5043880.0 7.0 False
3365 Luminarias 2000.0 José Luis Valenzuela 100.0 Color Comedy|Romance USA A partir de 18 anos 1000000.0 428535.0 3,6 24 Cheech Marin Lupe Ontiveros Robert Beltran -571465.0 3.6 False
2888 Moms' Night Out 2014.0 Andrew Erwin 98.0 Color Comedy USA Livre 5000000.0 10429707.0 5,4 0 Alex Kendrick Sarah Drew Patricia Heaton 5429707.0 5.4 False
502 Doctor Dolittle 1998.0 Betty Thomas 85.0 Color Comedy|Family|Fantasy USA A partir de 13 anos 71500000.0 144156464.0 5,3 694 Oliver Platt Raven-Symoné Peter Boyle 72656464.0 5.3 False
3035 Teen Wolf Too 1987.0 Christopher Leitch 95.0 Color Comedy|Fantasy USA Livre 3000000.0 7888703.0 3,2 491 John Astin Robert Neary Kim Darby 4888703.0 3.2 False
2529 Fiddler on the Roof 1971.0 Norman Jewison 181.0 Color Drama|Family|Musical|Romance USA Outros 9000000.0 50000000.0 8,0 0 Topol Paul Michael Glaser Rosalind Harris 41000000.0 8.0 False
694 Beyond Borders 2003.0 Martin Campbell 127.0 Color Adventure|Drama|Romance|War USA A partir de 18 anos 35000000.0 4426297.0 6,5 0 Angelina Jolie Pitt Teri Polo Noah Emmerich -30573703.0 6.5 False
3501 Good Kill 2014.0 Andrew Niccol 102.0 Color Drama|Thriller USA A partir de 18 anos NaN 316842.0 6,4 0 Bruce Greenwood Zoë Kravitz Stafford Douglas NaN 6.4 False
3418 Latter Days 2003.0 C. Jay Cox 107.0 Color Comedy|Drama|Romance USA A partir de 18 anos 850000.0 819939.0 7,2 0 Joseph Gordon-Levitt Rob McElhenney Jacqueline Bisset -30061.0 7.2 False
2246 This Christmas 2007.0 Preston A. Whitmore II 117.0 Color Comedy|Drama|Romance USA A partir de 13 anos 13000000.0 49121934.0 6,1 0 Mekhi Phifer Chris Brown Loretta Devine 36121934.0 6.1 False
1878 A Most Violent Year 2014.0 J.C. Chandor 125.0 Color Action|Crime|Drama|Thriller USA A partir de 18 anos 20000000.0 5749134.0 7,0 0 David Oyelowo Ashley Williams Albert Brooks -14250866.0 7.0 False
2720 Daddy Day Camp 2007.0 Fred Savage 89.0 Color Comedy|Family USA Livre 6000000.0 13235267.0 2,9 256 Lochlyn Munro Brian Doyle-Murray Tamala Jones 7235267.0 2.9 False
2989 Batman: The Dark Knight Returns, Part 2 2013.0 Jay Oliva 148.0 Color Action|Animation|Crime|Sci-Fi|Thriller USA A partir de 13 anos 3500000.0 NaN 8,4 5000 Michael Emerson Mark Valley Grey Griffin NaN 8.4 True
388 Get Smart 2008.0 Peter Segal 110.0 Color Action|Adventure|Comedy USA A partir de 13 anos 80000000.0 130313314.0 6,5 0 Bill Murray Dwayne Johnson Anne Hathaway 50313314.0 6.5 False
In [49]:
# ii
tabela_maior_8_por_ano = df[['ano', 'MaiorQueOito']].groupby('ano').sum()
tabela_maior_8_por_ano
Out[49]:
MaiorQueOito
ano
1916.0 0
1920.0 0
1925.0 1
1929.0 0
1930.0 0
... ...
2012.0 5
2013.0 4
2014.0 9
2015.0 6
2016.0 4

90 rows × 1 columns

In [50]:
# iii
px.bar(tabela_maior_8_por_ano, height=600)
In [51]:
# f. Represente as mesmas informações do item e com um gráfico de pizza.
tabela_maior_8_por_ano.plot(kind='pie', y='MaiorQueOito', figsize=(20, 10), legend=False)
Out[51]:
<Axes: ylabel='MaiorQueOito'>
No description has been provided for this image
In [52]:
# O gráfico tem muitos valores e fica difícil de visualizar. Vamos pegar apenas os anos com 3 ou mais filmes, ou seja, anos de bastante destaque:
tabela_maior_8_por_ano.query('MaiorQueOito >= 3').plot(kind='pie', y='MaiorQueOito', figsize=(20, 10), legend=False)
Out[52]:
<Axes: ylabel='MaiorQueOito'>
No description has been provided for this image